package models;

import dao.DAOExercicio;
import dao.DAOGrupoMuscular;

public class Exercicio {

	public int id;
	public String nome;
	public int idGrupoMuscular;
	public GrupoMuscular grupoMuscular;
	
	public String toString(){
		return id + " - " + nome +" - "+ idGrupoMuscular;
	}
	
	public boolean equals(Exercicio ex) {
		return (ex.id == this.id && 
				ex.nome.equals(this.nome) && 
				ex.idGrupoMuscular == this.idGrupoMuscular);
	}
	
	public void cadastrar() throws NegocioException {
		
		this.nome = this.nome.trim();
		
		if (this.nome != null && !this.nome.equals("")) {
			if (this.idGrupoMuscular > 0) {
			
				DAOExercicio dao = new DAOExercicio();
	
				try {
					Exercicio e = dao.select(this.nome);
					if (e == null) {
						dao.insert(this);
					} else {
						throw new NegocioException("Exercício não cadastrado, pois, já se encontra cadastrado.");
					}
	
				} catch (Exception e) {
					throw new NegocioException("Exercício não cadastrado. Erro de comunicação com o Banco de Dados.");
				}
			} else {
				throw new NegocioException("Exercício não foi cadastrado. Um grupo muscular deve ser informado.");
			}
		} else {
			throw new NegocioException("Exercício não foi cadastrado. Um nome deve ser informado.");
		}
	}
	
	public void editar() throws NegocioException {
		
		this.nome = this.nome.trim();
		
		if (this.nome != null && !this.nome.equals("")) {
			if (this.idGrupoMuscular > 0) {
			
			DAOExercicio dao = new DAOExercicio();

				try {
					Exercicio exercicio = dao.select(this.id);
					if (!exercicio.equals(this)) {
						dao.update(this);
					} else {
						throw new NegocioException("Exercício não foi editado, pois, já se encontra cadastrado.");
					}
	
				} catch (Exception e) {
					throw new NegocioException("Exercício não foi editado. Erro de comunicação com o Banco de Dados.");
				}
			} else {
				throw new NegocioException("Exercício não foi editado. Um grupo muscular deve ser informado.");
			}
		} else {
			throw new NegocioException("Exercício não foi editado. Um nome deve ser informado.");
		}
		
	}
	
	
	public void remover() throws NegocioException {
		
		DAOExercicio dao = new DAOExercicio();

		try {
			Exercicio exercicio = dao.select(this.id);
			if (exercicio != null) {
				dao.delete(this);
			} else {
				throw new NegocioException("Exercício não foi removido. Não existe exercício com código especificado.");
			}

		} catch (Exception e) {
			throw new NegocioException("Exercício não foi removido. Erro de comunicação com o Banco de Dados.");
		}
		
	}
	
}
